import 'dart:async';
import 'dart:io';

// import 'package:connectivity_plus/connectivity_plus.dart'; // 已注释
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';

import '../config/app_colors.dart';

///JoyWebViewManager
class JoyWebViewManager {
  static final JoyWebViewManager _instance = JoyWebViewManager._internal();
  factory JoyWebViewManager() => _instance;
  JoyWebViewManager._internal();

  WebViewController? _sharedWebViewController;
  bool _isInitialized = false;
  final Map<String, String> _cacheHeaders = {
    'Cache-Control': 'max-age=86400', // 24-hour cache
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
  };

  // 预热WebView，在应用启动时调用
  Future<void> preloadWebView() async {
    if (_isInitialized) return;

    try {
      String userAgent;
      if (Platform.isAndroid) {
        userAgent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36';
      } else {
        userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1';
      }

      _sharedWebViewController = WebViewController()
        ..setJavaScriptMode(JavaScriptMode.unrestricted)
        ..setBackgroundColor(Colors.transparent)
        ..setUserAgent(userAgent)
        ..enableZoom(true);

      try {
        // 所有平台统一使用标准API加载请求
        await _sharedWebViewController?.loadRequest(
          Uri.parse('https://m.allchinabuy.com/home/'),
          headers: _cacheHeaders,
        );

        // 平台特定的额外配置
        if (Platform.isAndroid) {
          final androidController = _sharedWebViewController!.platform as AndroidWebViewController;
          androidController.setMediaPlaybackRequiresUserGesture(false);
        }
      } catch (e) {
        debugPrint('WebView preheating error: $e');
        // Preheating failure does not affect normal use
      }

      _isInitialized = true;
    } catch (e) {
      debugPrint('WebView manager initialization failed: $e');
      _isInitialized = false;
    }
  }

  WebViewController? getController() {
    if (!_isInitialized) {
      debugPrint('WebView not initialized, return null');
      return null;
    }
    return _sharedWebViewController;
  }

  bool isInitialized() => _isInitialized;

  // 添加清理方法
  void dispose() {
    try {
      _sharedWebViewController = null;
      _isInitialized = false;
    } catch (e) {
      debugPrint('WebView manager cleanup failed: $e');
    }
  }
}



class JOYWebViewPage extends StatefulWidget {
  final String initialUrl;

  const JOYWebViewPage({Key? key, required this.initialUrl}) : super(key: key);

  @override
  State<JOYWebViewPage> createState() => _ACCWebViewPageState();
}

class _ACCWebViewPageState extends State<JOYWebViewPage> {
  late WebViewController _controller;
  // bool _isConnected = true; // 已注释
  bool _isLoading = true;
  bool _isFirstLoad = true; // 添加首次加载标志
  double _loginTopH = 420; // 遮挡弹出top距离
  double _loginsizeH = 140; // 遮挡view高度
  String _currentUrl = '';
  bool _showCopyButton = false; // 添加控制Copy按钮显示的状态
  bool _showOverlay = false; // 添加控制覆盖层显示的状态
  late Map<String, String> _headers = {};
  final Completer<void> _webViewInitialized = Completer<void>();

  // 加载超时相关变量
  Timer? _loadingTimeoutTimer;
  Timer? _countdownTimer; // 倒计时计时器
  final int _loadingTimeoutSeconds = 5; // 设置加载超时时间为2秒
  int _remainingSeconds = 5; // 剩余秒数


  // 修改WebView配置方法
  void _configureWebView() {
    _controller
      ..addJavaScriptChannel(
        'FlutterApp',
        onMessageReceived: (JavaScriptMessage message) {
        },
      )
      ..setNavigationDelegate(NavigationDelegate(
        onNavigationRequest: (NavigationRequest request) {

          return NavigationDecision.navigate;
        },
        onUrlChange: (change) {
          debugPrint('onUrlChange: ${change.url}');
        },
        onPageStarted: (String url) {
          if (mounted) {
            debugPrint('onPageStarted: $url');
            setState(() {
              _currentUrl = url;
              // 只在首次加载时显示loading
              if (_isFirstLoad) {
                _isLoading = true;

                // 设置加载超时计时器
                _startLoadingTimeoutTimer();
              }

            });
            // 在页面开始加载时注入基础JavaScript代码

          }
        },
        onPageFinished: (String url) {

          debugPrint('onPageFinished: $url');
          // 页面加载完成后重新注入基础JavaScript代码和性能优化代码
          if (mounted) {

            setState(() {
              _isLoading = false;
              _isFirstLoad = false;

            });
          }

          // 取消超时计时器
          _cancelLoadingTimeoutTimer();

        },
        onWebResourceError: (WebResourceError error) {
          debugPrint('Page resource error: ${error}');
          // 取消超时计时器
          _cancelLoadingTimeoutTimer();

          if (mounted) {
            setState(() {
              debugPrint('Page resource error: ${error}');
              _isLoading = false;
            });
          }
        },
      ));
  }

  @override
  void initState() {
    super.initState();

    // 设置状态栏样式
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarIconBrightness: Brightness.dark, // 状态栏图标为黑色
        statusBarBrightness: Brightness.light,    // 状态栏背景为亮色
      ),
    );

    // // 检查网络连接 // 已注释
    // acccheckConnectivity(); // 已注释

    // 使用预热或新建WebView控制器
    accinitOrReuseWebView();

    // 准备请求头
    accinitHeaders();
  }

  @override
  void dispose() {
    // 取消所有计时器
    _cancelLoadingTimeoutTimer();
    _cancelCountdownTimer();

    super.dispose();

    debugPrint('Page disappeared');
    SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
      statusBarIconBrightness: Brightness.dark,  // 状态栏图标亮度（白色背景用暗色图标）
      statusBarBrightness: Brightness.light,  // iOS状态栏亮度
    ));

  }

  // 启动加载超时计时器
  void _startLoadingTimeoutTimer() {
    // 先取消已有的计时器
    _cancelLoadingTimeoutTimer();

    // 重置倒计时秒数
    setState(() {
      _remainingSeconds = _loadingTimeoutSeconds;
    });

    // 设置新的超时计时器
    _loadingTimeoutTimer = Timer(Duration(seconds: _loadingTimeoutSeconds), () {
      if (mounted) {
        setState(() {
          debugPrint('WebView loading timeout, automatically hide loading indicator');
          _isLoading = false;
          // 显示超时提示和重试按钮
          // _showTimeoutDialog();
        });
      }
    });

    // 设置倒计时计时器，每秒更新一次
    _countdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) {
      if (mounted) {
        setState(() {
          if (_remainingSeconds > 0) {
            _remainingSeconds--;
          } else {
            _cancelCountdownTimer();
          }
        });
      }
    });
  }

  // 取消加载超时计时器
  void _cancelLoadingTimeoutTimer() {
    _loadingTimeoutTimer?.cancel();
    _loadingTimeoutTimer = null;
    _cancelCountdownTimer();
  }

  // 取消倒计时计时器
  void _cancelCountdownTimer() {
    _countdownTimer?.cancel();
    _countdownTimer = null;
  }

  // // Future<void> acccheckConnectivity() async { // 已注释
  // //   var connectivityResult = await Connectivity().checkConnectivity(); // 已注释
  // //   setState(() { // 已注释
  // //     _isConnected = connectivityResult != ConnectivityResult.none; // 已注释
  // //   }); // 已注释
  // //
  // //   // 监听网络连接状态变化 // 已注释
  // //   Connectivity().onConnectivityChanged.listen((ConnectivityResult result) { // 已注释
  // //     final wasDisconnected = !_isConnected; // 保存之前的连接状态 // 已注释
  // //
  // //     setState(() { // 已注释
  // //       _isConnected = result != ConnectivityResult.none; // 已注释
  // //     }); // 已注释
  // //
  // //     // 只有在之前断开连接且现在恢复连接的情况下才重新加载页面 // 已注释
  // //     if (wasDisconnected && _isConnected && _currentUrl.isNotEmpty) { // 已注释
  // //       _controller.loadRequest(Uri.parse(_currentUrl)); // 已注释
  // //     } // 已注释
  // //   } as void Function(List<ConnectivityResult> event)?); // 已注释
  // // } // 已注释

  Future<void> accinitHeaders() async {
    // PackageInfo packageInfo = await PackageInfo.fromPlatform();
    if (_webViewInitialized.isCompleted) {
      _controller.loadRequest(Uri.parse(widget.initialUrl), headers: _headers);
    }
  }


  void accinitOrReuseWebView() async {
    final webViewManager = JoyWebViewManager();

    // 如果WebView已预热，使用已有实例
    if (webViewManager.isInitialized()) {
      _controller = webViewManager.getController()!;
      _configureWebView();
    } else {
      // 如果没有预热，创建新的WebView
      await _initWebView();
    }

    if (!_webViewInitialized.isCompleted) {
      _webViewInitialized.complete();
    }

    // 加载URL
    _loadInitialUrl();
  }

  void _loadInitialUrl() async {
    // if (_isConnected) { // 已修改为始终加载
      try {
        // 设置初始加载的超时计时器
        if (_isFirstLoad) {
          _startLoadingTimeoutTimer();
        }

        await _controller.loadRequest(Uri.parse(widget.initialUrl), headers: _headers);

      } catch (e) {
        debugPrint('Error loading initial URL: $e');
        // 取消超时计时器
        _cancelLoadingTimeoutTimer();

        if (mounted) {
          setState(() {
            _isLoading = false;
            _isFirstLoad = false;
          });
        }
      }
    // } // 已注释
  }


  Future<void> _initWebView() async {
    String userAgent;
    if (Platform.isAndroid) {
      userAgent = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36';
    } else {
      userAgent = 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1';
    }

    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(Colors.transparent)
      ..setUserAgent(userAgent);

    // 配置缓存相关的设置
    try {
      if (Platform.isAndroid) {
        // Android平台特定配置
        final androidController = _controller.platform as AndroidWebViewController;
        androidController
          ..setMediaPlaybackRequiresUserGesture(false);

      } else if (Platform.isIOS) {
        // iOS平台特定配置
        final webKitController = _controller.platform as WebKitWebViewController;
        webKitController
          ..setAllowsBackForwardNavigationGestures(true);
      }
    } catch (e) {
      debugPrint('Platform-specific WebView configuration error: $e');
    }

    _configureWebView();

    // 预热WebView
    await _controller.setBackgroundColor(Colors.transparent);
  }


  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {

        return true; // 允许返回上一页
      },
      child: Scaffold(
        appBar: AppBar(
          title: Text('Details',style: TextStyle(color: Colors.black),),
          elevation: 0,
          centerTitle: true,
          flexibleSpace: Container(
            decoration: const BoxDecoration(
              // image: DecorationImage(
              //   image: AssetImage('images/nav_background.png'),
              //   fit: BoxFit.cover,
              // ),
            ),
          ),
          systemOverlayStyle: const SystemUiOverlayStyle(
            statusBarColor: Colors.transparent, // 状态栏背景色为黑色
            statusBarIconBrightness: Brightness.dark, // 状态栏图标为白色
            statusBarBrightness: Brightness.light, // iOS状态栏亮度
          ),
        ),
        backgroundColor: Colors.white, // 设置白色背景，避免黑屏
        body: AnnotatedRegion<SystemUiOverlayStyle>(
          value: const SystemUiOverlayStyle(
            statusBarColor: Colors.transparent,
            statusBarIconBrightness: Brightness.dark, // 状态栏图标为黑色
            statusBarBrightness: Brightness.light,    // 状态栏背景为亮色
          ),
          child: SafeArea(
            child: Stack(
              children: [
                // WebView内容
                // !_isConnected // 已注释
                //     ? _buildNoConnectionWidget() // 已注释
                //     : WebViewWidget(controller: _controller), // 已修改为始终显示WebView

                WebViewWidget(controller: _controller), // 始终显示WebView

                // 加载指示器
                if (_isLoading)
                  Container(
                    color: Colors.white,
                    child: Center(
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: [
                          CircularProgressIndicator(
                            color: AppColors.textHint,
                          ),
                          const SizedBox(height: 16),
                          Text(
                            'Loading...',
                            style: TextStyle(
                              fontSize: 16,
                              color: Colors.grey[700],
                            ),
                          ),
                          const SizedBox(height: 24),
                          Text(
                            '$_remainingSeconds',
                            style: TextStyle(
                              fontSize: 12,
                              color: Colors.grey[500],
                            ),
                          ),
                        ],
                      ),
                    ),
                  ),

              ],
            ),
          ),
        ),
      ),
    );
  }

  // // Widget _buildNoConnectionWidget() { // 已注释
  // //   return Center( // 已注释
  // //     child: Column( // 已注释
  // //       mainAxisAlignment: MainAxisAlignment.center, // 已注释
  // //       children: [ // 已注释
  // //         const Icon( // 已注释
  // //           Icons.signal_wifi_off, // 已注释
  // //           size: 64, // 已注释
  // //           color: Colors.grey, // 已注释
  // //         ), // 已注释
  // //         const SizedBox(height: 16), // 已注释
  // //         Text( // 已注释
  // //           'No Network Connection', // 已注释
  // //           style: const TextStyle( // 已注释
  // //             fontSize: 18, // 已注释
  // //             fontWeight: FontWeight.bold, // 已注释
  // //           ), // 已注释
  // //         ), // 已注释
  // //         const SizedBox(height: 8), // 已注释
  // //         ElevatedButton( // 已注释
  // //           onPressed: () async { // 已注释
  // //             await acccheckConnectivity(); // 已注释
  // //             if (_isConnected) { // 已注释
  // //               final urlToLoad = _currentUrl.isNotEmpty ? _currentUrl : widget.initialUrl; // 已注释
  // //               _controller.loadRequest(Uri.parse(urlToLoad)); // 已注释
  // //             } // 已注释
  // //           }, // 已注释
  // //           child: Text( // 已注释
  // //             'Retry', // 已注释
  // //             style: const TextStyle( // 已注释
  // //               fontSize: 16, // 已注释
  // //               fontWeight: FontWeight.bold, // 已注释
  // //             ), // 已注释
  // //           ), // 已注释
  // //         ), // 已注释
  // //       ], // 已注释
  // //     ), // 已注释
  // //   ); // 已注释
  // // } // 已注释
}